package main

import "fmt"

/*
channel
1 本质是一个数据队列
2 数据是先进先出
3 线程安全，多goroutine访问时，不需要加锁
4 channel是有类型的，一个string的channel只能存放string类型数据

-----------------------------
channel是引用类型
channel必须初始化才能写入数据，即make后才能使用
-----------------------------
channel使用注意事项
1 channel只能存放指定的数据类型
2 channel的数据放满后，就不能在放入了
3 如果从channel中取出数据后，可以继续放入
4 在没有协程的情况下，如果channel数据取完了，再取就会报错 dead lock


*/

func main() {
	//创建一个可以存放三个int 类型的管道
	var intChan chan int
	intChan = make(chan int, 3)

	fmt.Println(intChan)

	intChan <- 1
	intChan <- 2
	intChan <- 3

	//从channel中取出数据
	fmt.Println(<-intChan)
}
